A data processing machine, such as a microprocessor, is a device for transforming input data (operands) into output data in accordance with operational instructions. Typically, a microprocessor takes the form of a semiconductor circuit which is integrated in a single crystal body ("chip") of semiconductive silicon. The input data or instructions or both typically are furnished to the microprocessor at least in part by one or more RAM arrays. Typically, each such RAM takes the form of a crosspoint array of memory elements. Each of the memory elements in the RAM can be accessed by the microprocessor during operation for the purpose of reading data from the RAM or writing data into the RAM. The RAM array is typically integrated in a single semiconductor body ("chip") which also includes a timing clock chain governing each cycle of internal operation of the RAM. The timing chain typically includes, for example, a clock for enabling properly timed address (access) to selected memory cells in the RAM and a clock for enabling data output from the RAM to be stored temporarily in data output registers, as known in the art.
In many practical applications, two separate microprocessors share a common RAM array, whereby both of the microprocessors can read or write the same RAM. However, the two microprocessors may operate at different rates asynchronously; that is, the timing of operations in one of the microprocessors is not correlated in any way with the timing in the other. Thus, one of the microprocessors can initiate a request for access to the RAM at the same time when the other is already accessing the RAM (or the other simultaneously initiates a request for access to the RAM); i.e., the microprocessors seek overlapping (or simultaneous) access. For proper operation, however, only one microprocessor can actually be allowed to gain access to the RAM at a time; otherwise confusion would result in the data supplied to (during writing) or from (during reading) the RAM from or to the microprocessors. Since, for example, it takes typically about 100 nanoseconds for one microprocessor to access a RAM, the probability of conflicting (overlapping or simultaneous) access requests is undesirably high; for example, in a situation where the RAM has an internal operating cycle time of about 100 nanoseconds while each microprocessor attempts access to the RAM once every 200 or 300 nanoseconds on the average, this probability of conflicting access requests can be as high as about 50 percent or more per access.
Accordingly, it is desirable to have an electrical circuit for enabling orderly access to a target circuit by a pair of data processing machines so that no access confusion results, that is, a circuit which enables access to the RAM by only one of the two data processing machines at a time by suitably resolving conflicting (whether overlapping or simultaneous) access requests.
In the prior art, orderly access to a RAM, for example, by two microprocessors (say MP-1 and MP-2) has been achieved by synchronizing the timing clocks of two microprocessors so as to operate the microprocessors at the timing rate of the slower of the two (say MP-2), and (temporarily) to halt operation of one of the microprocessors (MP-1 or MP-2) whenever the other of the microprocessors (MP-2 or MP-1) is accessing the RAM. Such an arrangement, however, undesirably slows down the operation of the originally faster microprocessor (MP-1), and/or undesirably requires excess logic elements to halt operation of one of the microprocessors (MP-1 or MP-2) while the other accesses the RAM.
It would therefore be desirable to have a circuit for enabling orderly access to a target circuit by a pair of data processing machines, but which does not require that the machines operate synchronously.